package com.jeesite.common.utils;

import org.springframework.beans.BeanUtils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class ClassUtils {

    /**
     * 字段转驼峰明明
     *
     * @param columnName 字段编号
     * @return 驼峰命名字段
     */
    public static String camelCharset(String columnName) {
        StringBuilder sb = new StringBuilder();
        boolean flag = false;
        for (int i = 0; i < columnName.length(); i++) {
            char c = columnName.charAt(i);
            if (c != '_') {
                if (flag) {
                    sb.append(Character.toUpperCase(c));
                } else {
                    sb.append(c);
                }
                flag = false;
            } else {
                flag = true;
            }
        }
        return sb.toString();
    }

    /**
     * Bean复制方法。将源对象的属性值赋给目标类中对应字段，使用Spring框架中的beanUtil工具进行操作（org.springframework包下的utils部分的方法）
     *
     * @param source 源对象，即要复制的属性。
     * @param target 目标类实例（对象将被赋值给这些属性，如果源和目的类的字段具有相同的名称则会覆盖该行为。因此请确保它们有公共访问器或公有的setter方法来避免这种情况发生的情况！）
     */
    public static void beanCopy(Object source, Object target) {
        BeanUtils.copyProperties(source, target);
    }


    public static String dateFormat(Date date, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }

    /**
     * 日期加减
     * @param date 初始日期，如果为null则默认为当前时间。
     * @param days 要加减的天数。如果为负整数，则表示减少指定的时间段（例如一天中的一小时等于24个单位时间量）；如果是正整数或零则是增加该数量日期时长。
     * @return 日期加减后的新时间。如果初始时为null，则返回当前的Date对象（即调用此方法时的本地系统的时间戳+天数）
     */
    public static Date datePlus(Date date, int days) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, days);
        return calendar.getTime();
    }
    /**
     * @return a date instance of current time in the default format (yyyymmdd) with milliseconds set to 0 and without TimeZone information present for this object's Instantiate an Object Date, Locale is used as well. The method getInstance() returns new instances that are not initialized yet but can be populated by subsequent calls on the same instance of java util date format
     */
    public static  String currentDate(String format) {
        return dateFormat(new Date(),format);
    }
}
